home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 11, No. 11 (1990-11)(MindCraft Publishing)(Side A)[a].zip / Nibble Volume 11, No. 11 (1990-11)(MindCraft Publishing)(Side A)[a].po / APPLEMATE.S < prev    next >
Text File  |  1996-12-24  |  4KB  |  147 lines

  1. ************************
  2. *       AppleMate      *
  3. *                      *
  4. *     The Complete     *
  5. *    Keyboard Macro    *
  6. *        System        *
  7. *                      *
  8. *  Copyright 1990  by  *
  9. *    MindCraft, Inc.   *
  10. *                      *
  11. *   Merlin  Assembler  *
  12. ************************
  13.  
  14.  
  15.           ORG $4000
  16.  
  17. PTR       = $06
  18. ADDR_HI   = $07
  19. MACRONUM  = $08
  20. AREG      = $45
  21. BUFFPOS   = $46
  22.  
  23. CHRGET    = $B1
  24. CHRGOT    = $B7
  25. TXTPTR    = $B8
  26. DATA      = $D995
  27.  
  28. BUFFER    = $200
  29. OLDKSWL   = $BE32
  30.  
  31. BUTTON    = $C061
  32. COUT      = $FDED
  33. RESTORE   = $FF3F
  34. SAVE      = $FF4A
  35.  
  36.  
  37.           CLD
  38.           LDA TXTPTR     ;Save TXTPTR in case "&" cmd
  39.           STA PTR        ;isn't ours.
  40.           LDA TXTPTR+1
  41.           STA PTR+1
  42.           JSR CHRGOT 'Was &"MAC" entered?
  43.           AND #$DF
  44.           CMP #'M'
  45.           BNE NOT_OURS
  46.           JSR CHRGET
  47.           AND #$DF
  48.           CMP #'A'
  49.           BNE NOT_OURS
  50.           JSR CHRGET
  51.           AND #$DF
  52.           CMP #'C'
  53.           BEQ OUR_CMD
  54. NOT_OURS  LDA PTR        ;If not, restore pointers
  55.           STA TXTPTR
  56.           LDA PTR+1
  57.           STA TXTPTR+1
  58.           JSR CHRGOT     ;re-get first char, and
  59.           JMP $FFFF      ;JMP to address set by
  60.                          ;Applesoft installer.
  61. OUR_CMD
  62.           LDA #$00       ;Hi byte of BEGIN POKEd here
  63.           STA PTR+1      ;by Applesoft installer.
  64.           LDA OLDKSWL    ;Applemate already there?
  65.           CMP #<BEGIN
  66.           BNE INSTALL
  67.           JMP DATA       ;Exit to Applesoft if so
  68.  
  69. INSTALL   LDA #<BEGIN    ;Set low byte; high byte set
  70.           STA PTR        ;above.
  71.           LDY #1
  72.           LDA OLDKSWL    ;Save location of original
  73.           STA (PTR),Y    ;KSWL so as to be able to
  74.           INY            ;be able to JSR to it.
  75.           LDA OLDKSWL+1
  76.           STA (PTR),Y
  77.  
  78.           LDA #<BEGIN    ;Install new input routine
  79.           STA OLDKSWL    ;into keyboard input vectors.
  80.           LDA ADDR_HI    ;(High byte of 'BEGIN')
  81.           STA OLDKSWL+1
  82.           CLC
  83.           ADC #1         ;Add 1 for hi byte of table
  84.           LDY #TBL_ADDR+1-BEGIN  ;Poke addr of macro
  85.           STA (PTR),Y         ;table into code.
  86.  
  87.           NOP            ;Leave room for DOS 3.3
  88.           NOP            ;patch (JSR $03EA).
  89.           NOP
  90.           JMP DATA       ;Installation done; exit
  91.  
  92. BEGIN     JSR $FFFF      ;First JSR to original KSWL
  93.  
  94.           JSR SAVE       ;Save registers in zero page
  95.           LDY #$00       ;Set offset byte to zero
  96.           LDX BUTTON     ;Open-apple being pressed?
  97.           BMI CHECKKEY
  98.           LDX BUTTON+1   ;Closed-apple?
  99.           BPL RETURN     ;If neither, exit
  100.  
  101.           LDY #$0A       ;Set offset for closed-apple
  102.  
  103. CHECKKEY  STY MACRONUM   ;Save offset
  104.           LDA AREG       ;Is the keypress valid?
  105.           SEC
  106.           SBC #$B0       ;Is keypress less than "0"?
  107.           BMI RETURN
  108.           CMP #$0A       ;greater than "9"?
  109.           BCS RETURN
  110.  
  111.           ADC MACRONUM   ;Add in offset byte
  112.           STA MACRONUM   ;Number of macro wanted
  113.           LDY #$00       ;Zero in Y used below
  114.           STY PTR        ;Low byte = 0
  115. TBL_ADDR  LDA #$00       ;Set by INSTALL routine
  116.           STA PTR+1      ;Macro table $100 above
  117.                          ;AppleMate code.
  118. SCAN1                    ;Find the macro wanted
  119.           DEC MACRONUM   ;If DEC'd around to $FF,
  120.           BMI READMAC2   ;it's our macro; go do it.
  121. SCAN2     LDA (PTR),Y    ;Scan for end of this macro
  122.           PHP            ;Save N flag
  123.           INC PTR        ;Increment location of macro
  124.           BNE SCAN3
  125.           INC PTR+1
  126. SCAN3     PLP            ;Get back N flag; macro end?
  127.           BPL SCAN2      ;If not, then keep scanning
  128.           BMI SCAN1      ;If yes, decrement number
  129.  
  130. READMAC1  INY            ;Start storing macro in the
  131. READMAC2  LDA (PTR),Y    ;keyboard buffer.
  132.           BMI ENDUP      ;Is it last char of macro?
  133.  
  134.           LDX BUFFPOS    ;No; go ahead and poke char
  135.           ORA #$80
  136.           STA BUFFER,X
  137.           JSR COUT       ;Print char to screen
  138.           INX            ;Increment buffer pointer
  139.           STX BUFFPOS
  140.           CPX #$F0       ;Is it end of buffer?
  141.           BCC READMAC1   ;If not then continue
  142.           LDA #$98       ;If yes then control-X
  143.  
  144. ENDUP     STA AREG       ;End with pseudo key-press
  145.  
  146. RETURN    JMP RESTORE    ;All done; return control
  147.